(for Internet Explorer)
Sub  CutLastOf( in_out_Str as string, LastStr as string, Opt as integer )
(src)
in_out_Str の最後が LastStr と一致したら、それをカットします。
【引数】
in_out_Str
LastStr
(入出力) カットされるかもしれない文字列
比較する文字列
関連
→ T_Str.vbs # [T_StrComp]
テスト
Opt
Empty または
サンプル:
s = "file1.txt"
CutLastOf  s, "1.txt", Empty
Assert  s = "file"
Path の最後を区切り記号にします
ファイル名(拡張子を除く)の最後を削除します
文字列の末尾を比較します
末尾にあるフォルダーの区切り記号を返します
Function  LenK( Str as string ) as integer
英文字を 1文字、日本語(文字コード256以上)を 2文字として文字数を返します。
サンプル:
LenK( "123" ) = 3
LenK( "123あいう" ) = 9
Len(  "123あいう" ) = 6
(src)
関連
(src)
Function  StrCount( Str as string, Keyword as string, StartPos as integer, Opt as integer ) as integer
文字列が存在する数を返します。
【引数】
Str
Keyword
数を数えられる文字列
数を数える文字列
Opt
Empty または
Str 引数の値
Keyword 引数の値
返り値
返り値
Str の中にある Keyword の数
"ABCABC"
"ABC"
2
2
"A"
"ABCABC"
Str の中の、数え始める位置。 先頭=1
StartPos
"D"
0
"ABCABC"
"/Folder/File"
"/"
2
テスト
→ T_Str.vbs # [T_StrCount]
(src)
Function  GetTab( Level as integer ) as string
インデント数を指定して、空白文字を返します。
インデント数×2の空白文字を返します。
関連
Function  CutLineFeedAtRightEnd( Text as string, Width as integer ) as string
コマンドプロンプトの右端からあふれた文字列を1行にまとめます。
【引数】
Text
Width
コマンドプロンプトからコピーした文字列
コマンドプロンプトの幅
修正した文字列
返り値
サンプル
01234567890123456789
ABCDEFGHIJKLMNOPQRST
UVWXYZ
END
Width = 20 の場合、
ABCDEFGHIJKLMNOPQRSTUVWXYZ
END
→ ToolsLib.vbs
ソース
Function  StrCompOption( Opt as integer ) as integer
の Option 引数に指定する値を返します。
Opt 引数の値
返り値
Empty
vbBinaryCompare (=0)
vbTextCompare (=1)
大文字小文字は区別しない
大文字小文字は区別する
その他
vbTextCompare (=1)
いろいろな関数の Opt 引数が、StrCompOption の Opt 引数と同じ意味を持つことが
よくあります。
Set c = g_VBS_Lib
If StrCompLastOf( "ABC", "BC", c.CaseSensitive ) = 0 Then ...
Set c = g_VBS_Lib
If StrComp( "ABC", "BC", StrCompOption( c.CaseSensitive ) ) = 0 Then ...
関連
サンプル
サンプル
テスト
→ T_ShakerSort.vbs
ソース
→ vbslib.vbs
→ T_Str.vbs # [T_StrComp]
テスト
Function  StrCompHeadOf( Str as string, HeadStr as string, Opt as integer ) as integer
文字列の先頭を比較します。
【引数】
Str
HeadStr
比較される文字列
Str の先頭と比較する文字列
Opt
Empty または
Str 引数の値
LastStr 引数の値
返り値
返り値
Str の先頭 = HeadStr なら、0 。
"ABCDE"
"ABC"
0 (=一致)
0以外(=異なる)、負の値
"CDE"
"ABCDE"
関連
です。
"AAA"
"ABCDE"
0以外(=異なる)、正の値
"ABCDE"
""
0 (=一致)
または c.AsPath
0 のとき、c.AsPath が設定されていないとき、
c.AsPath が設定されているとき、
0 (=一致)
"ABC\"
"ABC\DE"
0 (=一致)
"ABC/DE"
"ABC"
"ABC\DE"
"ABC"
0 (=一致)
0以外(=異なる)、正の値
"ABC"
"ABCDE"
返り値
LastStr 引数の値
Str 引数の値
"ABC\"
0以外(=異なる)、負の値
"ABC"
0 (=一致)
"."
"ABCDE"
""
0 (=一致)
"ABCDE"
0以外(=異なる)
Empty (*1)
"ABCDE"
*1
LastStr 引数 = Empty のときは、親フォルダーがなく、該当する親フォルダーに
入っていないために「異なる」という結果にしています。
→ vbslib.vbs
ソース
親フォルダー、またはその親フォルダー、… であるかどうかを比較します。
(src)
→ T_Str.vbs # [T_StrComp]
テスト
Function  StrCompLastOf( Str as string, LastStr as string, Opt as integer ) as integer
文字列の末尾を比較します。
【引数】
Str
LastStr
比較される文字列
Str の末尾と比較する文字列
Opt
Empty または
Str 引数の値
LastStr 引数の値
返り値
返り値
Str の末尾 = LastStr なら、0
"ABCDE"
"CDE"
0 (=一致)
0以外(=異なる)、正の値
"ABC"
"ABCDE"
関連
です。
(src)
Function  AddIfNotExist( WholeStr as string, AddStr as string, Separator as string,
    Opt ) as string
列挙された文字列のどれにも一致しなければ、先頭に追加します。
【引数】
WholeStr
AddStr
文字列の列挙
追加する文字列
Separator
文字列の列挙を区切る文字列
AddStr+Separator+WholeStr、または、WholeStr
返り値
Opt
Empty または
サンプル
Assert  AddIfNotExist( "ABC;DEF", "XYZ", ";", Empty ) = "XYZ;ABC;DEF"
Assert  AddIfNotExist( "ABC,XYZ", "XYZ", ",", Empty ) = "ABC;XYZ"
Assert  AddIfNotExist( "", "XYZ", ";", Empty ) = "XYZ;"
set_ "PATH", AddIfNotExist( env("%PATH%"), _
     GetFullPath( "..\bin", Empty ), ";", Empty )
サンプル
→ T_Str.vbs # [T_AddIfNotExist]
テスト
に "..\bin" フォルダーのフル・パスを追加する
関連
XYZ
XYZ
関連
" " で囲まれた部分を取り出す。
Function  MeltQuot( Line as string, in_out_Start as integer ) as string
i = 1
Do
  s = MeltQuot( line, i )
  If not IsEmpty( s ) Then (s を使った処理)
  If i = 0 Then Exit Do
Loop
【引数】
Line
in_out_Start
文字列全体
(入力) 取り出しを開始する文字の位置、(出力)次に取り出す〜
返り値
" " で囲まれた部分文字列。Empty=項目に値が無い
(src)
→ T_Str.vbs # [T_MeltQuot]
テスト
サンプル
Assert  MeltCmdLine( """double_quotation""", 1 ) = "double_quotation"
サンプル
C言語の printf 書式
Function  sprintf( in_Format as string,  in_Parameter as array of integer ) as string
で整形した文字列を返します。
【引数】
in_Format
in_Parameter
C言語の printf 書式
C言語の printf 書式のパラメーター
返り値
C言語の printf 書式で整形した文字列
サンプル
C言語の printf 書式のすべてはサポートしていません。
%d と %s は、そのまま文字列に挿入します。
%02d のように 0 から始まる数値が % と d の間にあれば、その桁数だけ上位に 0 が付きます。
% と d の間だけでなく、d 以外でも上位に 0 が付きます。
%X または %d は、16進数に変換して挿入します。 10進数の 10〜15 は、%X では A〜F、%x
では a〜f になります。
Assert  sprintf( "number = %d",  Array( 2 ) ) = "number = 2"
Assert  sprintf( "n = %02d, %02d, %02d",  Array( 3, 5, 10 ) ) = "n = 03, 05, 10"
Assert  sprintf( "0x%X, 0x%X, 0x%X, 0x%x",  Array( 8, 9, 10, 11 ) ) = "0x8, 0x9, 0xA, 0xb"

Assert  sprintf( "alphabet = %s",  Array( "A" ) ) = "alphabet = A"
Assert  sprintf( "alphabet = (%-4s)",  Array( "A" ) ) = "alphabet = (A   )"
→ T_Str.vbs
テスト
ソース
→ vbslib.vbs
T_sprintf
関連
Function  sscanf( String, Format )
文字列の途中を取り出します。
【引数】
String
Format
文字列全体
取り出す部分を指定する文字列。 "%d" または "%s" を含む
vbslib.vbs
ファイル:
返り値
取り出した文字列、または、数値
サンプル:
Assert  sscanf( "ABC123DEF", "ABC%dDEF" ) = 123
数値を取り出すときは、%d を使います。
文字列を取り出すときは、%s を使います。
Assert  sscanf( "===[ABC]===", "[%s]" ) = "ABC"
サンプル:
→ T_Str.vbs
テスト
関連
サンプル:
Assert  sscanf( "===[123] [456]===", "[%s]" ) = "123"
Assert  sscanf( "===[ [ 123 ] ]===", "[%s]" ) = " [ 123 "
複数にマッチする場合、最も左にあるものとマッチします
%d, %s 以外の部分がマッチしないときは、エラーになります。
ソース
→ vbslib.vbs
T_sscanf
Function  ScanFromTemplate( ScanString as string, TemplateString as string,
    KeywordArray as array of string, Option_ as Empty ) as dictionary of string
文字列の途中を複数取り出します。
【引数】
ScanString
TemplateString
取り出す文字列を含む文字列
取り出す部分を指定する文字列
KeywordArray
TemplateString に書かれた取り出す部分の文字列の配列
→ T_Str.vbs
テスト
Empty または g_VBSLib.WithDollarVariable
Option_
サンプル
    Set out = ScanFromTemplate(_
        "ab12cde34xyz",_
        "b${First}cde${Second}xy",_
        Array( "${First}", "${Second}" ), Empty )
    Assert  out("${First}")  = "12"
    Assert  out("${Second}") = "34"
KeywordArray 配列の要素は、TemplateString の中に含まれる順番に指定してください。
KeywordArray 配列の要素は、${ } や % % で囲んだ形式である必要はありません。
大文字小文字は区別します。
${ 文字を指定するときに $\{ を指定したときは、Option_ に  g_VBSLib.WithDollarVariable
を指定してください。
→ vbslib.vbs
ソース
取り出した文字列の辞書
返り値
ScanString が TemplateString にマッチしないときは、エラーになります。
関連
T_ScanFromTemplate
    Set out = ScanFromTemplate(_
        "abc def ghi"+ vbCRLF,_
        "%A% %B% %C%",_
        Array( "%A%", "%B%", "%C%" ), Empty )
    Assert  out("%A%") = "abc"
    Assert  out("%B%") = "def"
    Assert  out("%C%") = "ghi"+ vbCRLF
サンプル
変数が TemplateString 引数の端にあるとき
Sub  ScanMultipleFromTemplate( ScanString as string, TemplateString as string,
    Keywords as array of string, Option_ as Empty,
    out_Scaned as array of dictionary of string )
文字列からテンプレートを複数回適用してテンプレートの変数部分を取り出します。
【引数】
ScanString
TemplateString
取り出す文字列を含む文字列
取り出す部分を指定する文字列
Keywords
TemplateString に書かれた取り出す部分の文字列の配列
→ T_Str.vbs
テスト
Empty を指定してください
Option_
サンプル
    ScanMultipleFromTemplate _
        "  [1,2]  [3,4]  ",_
        "[${A},${B}]",_
        Array( "${A}", "${B}" ),  Empty,  out  '//(out) out
    Assert  out(0)("${A}") = "1"
    Assert  out(0)("${B}") = "2"
    Assert  out(1)("${A}") = "3"
    Assert  out(1)("${B}") = "4"
→ vbslib.vbs
ソース
取り出した文字列の辞書の配列
out_Scaned
T_ScanMultipleFromTemplate
参考
テンプレートを1回適用する場合
KeywordArray に配列ではない文字列を指定した場合、out_Scaned には辞書ではない
配列が出力されます。
サンプル
    ScanMultipleFromTemplate _
        "  [1]  [2]  ",_
        "[#]", "#",  Empty,  out  '//(out) out
    Assert  out(0) = "1"
    Assert  out(1) = "2"
関連
Function  InStrEx( WholeString as string, Keyword as string, StartIndex as integer,
                     Opt as integer ) as integer
オプションを指定して文字列を検索します。
【引数】
WholeString
Keyword
検索対象になる文字列
検索するキーワード。 複数指定するときは配列型で
StartIndex
検索を開始する位置。先頭=1。 全体を検索(先頭または末尾)=0
返り値
Opt
下記のフラグ、または Empty
見つかった文字列の先頭の位置。 0=見つからなかった
サンプル
単語全体にマッチする文字列を検索します
Set c = g_VBS_Lib
Assert  InStrEx( "answer ans", "ans", 1, c.WholeWord or c.CaseSensitive ) = 8
Opt 引数
c.WholeWord
下記のフラグを複数指定するときは、or で接続してください。
なお、c は、g_VBS_Lib の返り値です。
英語の単語全体にマッチする文字列を検索します。
このフラグを指定しなければ、単語の一部にキーワードを含む単語も
検索にヒットします。
c.Rev
c.CaseSensitive
大文字、小文字を区別します。
このフラグを指定しなければ、大文字、小文字が異なる文字列も
検索にヒットします。
前方(左上方向)に向かって検索します。
このフラグを指定しなければ、後方(右下方向)に向かって検索します。
"answer ans", "ans"
テスト
→ T_Str.vbs
c.LastNextPos
返り値を、見つかった文字列の末尾の次の位置にします。
(src)
参考
参考
T_InStrEx
T_InStrExWholeWord
T_InStrExArray
c.LineHead
検索キーワードが行頭にある場所を検索します。
検索キーワードが行末にある場所を検索します。
c.LineTail
T_InStrExLineHeadTail
指定したキーワードのどれか最初にマッチした文字列を検索します
pos = InStrEx( text,  Array( "{{", "}}", "=" ),  pos,  Empty )
サンプル
Array( "{{", "}}", "=" )
Function  InStrLast( WholeString as string, Keyword as string ) as integer
文字列を検索して、最初に見つかったキーワードの末尾の次の位置を返します。
【引数】
WholeString
Keyword
検索対象になる文字列
検索するキーワード
返り値
キーワードの末尾の次の位置、見つからない=0
→ T_Str.vbs # [T_InStrLast]
テスト
InStrLast( "ABCDEF", "CD" ) = 5  '// E の位置
サンプル
関連
ソース
→ vbslib.vbs
(src)
Function  IsWholeWord( WholeString as string, StartIndex as integer, SubWordLen as integer )
                       as integer
文字列の中の指定した範囲が、単語単位になっているかどうかを返します。
【引数】
WholeString
StartIndex
検索対象になる文字列
範囲の開始位置。 先頭=1。文字単位
SubWordLen
範囲の長さ(文字数)
単語単位になっているかどうか
返り値
サンプル
Assert  IsWholeWord( "This is a pen.", 6, 2 ) = True
Assert  IsWholeWord( "This", 2, 2 ) = False
Assert  IsWholeWord( "This is", 1, 7 ) = True
範囲の中に複数の単語があっても、両端が単語の単位になっていれば True になります。
関連
ソース
→ vbslib.vbs
(src)
.Keyword
.IsMatch
Function  StrMatchKey::IsMatch( TestStr as string ) as Boolean
* のワイルドカードを使って、マッチするかどうかを高速に判定します。
* は2つ以上指定できません。エラーになります。
Property  Keyword  as string
ワイルドカードを含むキーワード。
TestStr が、.Keyword で設定したワイルドカードにマッチするかどうかを返す。
大文字小文字を区別しません。
.IsMatchULCase
TestStr が、.Keyword で設定したワイルドカードにマッチするかどうかを返す。
大文字小文字を区別します。
Function  StrMatchKey::IsMatch( TestStr as string ) as Boolean
サンプル:
  Set match = new StrMatchKey
  match.Keyword = LCase( "*.TXT" )
  If match.IsMatch( "file1.txt" ) Then
    :
  End If
file1.txt
*.TXT
大文字小文字を区別しないときは、LCase を使って小文字にしてください。
テスト
→ T_Wildcard.vbs # [T_StrMatchKey]
.Test
.IgnoreCase
RegExp と同じ
関連
テキストを置き換えることを登録します。
指定のタグで囲まれたテキストを置き換えることを登録します。
テキストを置き換える手順のオブジェクト。
同じ手順を繰り返すことや、置き換える手順をパラメーター化できます。
登録しておいた処理を実行します。
    Set rep = new StringReplaceSetClass
    rep.Replace  "from", "to"
    output_text = rep.DoReplace( input_text )
関連
テスト
サンプル
ソース
→ T_Wildcard.vbs
→ vbslib.vbs
T_StringReplaceSet
T_StringReplaceSet_Range